#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long ll;

//int n, m, l;
//ll dis[200005];
//bool vis[200005];
//ll wei[200005];
//vector<pair<long long, long long>>e[200005];
//const int mod = 1e9 + 7;
//ll ans;
//struct node
//{
//	ll dis, pos;
//	bool operator<(const node& x) const {
//		return x.dis < dis;
//	}
//};
//
//priority_queue<node> q;
//
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	cin >> n >> m >> l;
//	for (ll i = 1, x; i <= n; i++) {
//		cin >> x;
//		wei[i] = x;
//		dis[i] = 1e18;
//	}
//	for (ll i = 1, x; i <= m; i++) {
//		cin >> x;
//		e[1].push_back({ x,0 });
//	}
//	dis[1] = 0;
//	q.push({ 0,1 });
//	for (ll i = 0, v, u, w; i < l; i++) {
//		cin >> u >> v >> w;
//		e[u].push_back({ v,w });
//		e[v].push_back({ u,w });
//	}
//	while (!q.empty()) {
//		node tmp = q.top();
//		ll u = tmp.pos;
//		q.pop();
//		if (vis[u])continue; vis[u] = 1;
//		for (ll i = 0; i < e[u].size(); i++) {
//			ll v = e[u][i].first;
//			ll w = e[u][i].second;
//			if (!vis[v] && dis[u] + w < dis[v]) {
//				dis[v] = dis[u] + w;
//				q.push({ dis[v],v });
//			}
//		}
//	}
//	for (ll i = 2; i <= n; i++) {
//		ans = (ans + (dis[i] * wei[i]) % mod) % mod;
//	}
//	cout << ans << '\n';
//	return 0;
//}
//
//class Solution {
//    class Sum {
//    public:
//        Sum() {
//            _ret += _i;
//            _i++;
//        }
//    };
//public:
//    int Sum_Solution(int n) {
//        Sum a[n];
//        return _ret;
//    }
//private:
//    static int _ret;
//    static int _i;
//};
//
//int Solution::_ret = 0;
//int Solution::_i = 1;

//
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//
//
//	return 0;
//}

//class Date {
//private:
//    int _year;
//    int _month;
//    int _day;
//public:
//    Date(int year = 1, int month = 1, int day = 1)
//        :_year(year)
//        , _month(month)
//        , _day(day)
//    {
//    }
//
//    int getmonth(int year, int month) {
//        int ok[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
//        if (month != 2)
//            return ok[month - 1];
//        else if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
//            return 29;
//        }
//        else {
//            return 28;
//        }
//    }
//
//    Date& operator+=(const int x) {
//        _day += x;
//        while (_day > getmonth(_year, _month)) {
//            _day -= getmonth(_year, _month);
//            _month++;
//            if (_month == 13) {
//                _month = 1;
//                _year++;
//            }
//        }
//        return *this;
//    }
//
//    void print() {
//        cout << _year << '-';
//        if (_month >= 10)
//            cout << _month << '-';
//        else
//            cout << 0 << _month << '-';
//        if (_day >= 10)
//            cout << _day;
//        else
//            cout << 0 << _day;
//        cout << '\n';
//
//    }
//
//};
//int t;
//int main() {
//    cin >> t;
//    while (t--) {
//        int y, m, d, dd;
//        cin >> y >> m >> d >> dd;
//        Date a(y, m, d);
//        a += dd;
//        a.print();
//    }
//    return 0;
//}

//template<typename T>
//void s(T& x1, T& x2) {
//	T tmp = x1;
//	x1 = x2;
//	x2 = tmp;
//}
//
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	int a = 0, b = 1;
//	s(a, b);
//	cout << a << ' ' << b;
//	
//	return 0;
//}
//

//int t;
//int n;
//void solve() {
//	cin >> n;
//	int z = n;
//	while (z--) {
//		int x, y;
//		cin >> x >> y;
//	}
//	if (n == 1)
//		cout << "Bob" << '\n';
//	else {
//		cout << "Alice" << '\n';
//	}
//}
//
//int main() {
//	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//	cin >> t;
//	while (t--) {
//		solve();
//	}
//	return 0;
//}

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<vector<int>> children;
void buildTree(int n, const vector<pair<int, int>>& edges) {
    vector<vector<int>> adj(n + 1);
    for (const auto& edge : edges) {
        int u = edge.first, v = edge.second;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    vector<bool> visited(n + 1, false);
    queue<int> q;
    q.push(1);
    visited[1] = true;
    children.resize(n + 1);
    while (!q.empty()) {
        int u = q.front();
        q.pop();
        for (int v : adj[u]) {
            if (!visited[v]) {
                visited[v] = true;
                children[u].push_back(v);
                q.push(v);
            }
        }
    }
}
int dfs(int u) {
    int sg = 0;
    for (int v : children[u]) {
        sg ^= (dfs(v) + 1);
    }
    return sg;
}
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        vector<pair<int, int>> edges;
        for (int i = 0; i < n - 1; ++i) {
            int u, v;
            cin >> u >> v;
            edges.emplace_back(u, v);
        }
        buildTree(n, edges);
        int sg = dfs(1);
        cout << (sg != 0 ? "Alice" : "Bob") << '\n';
        children.clear();
    }

    return 0;
}